import numpy as np
from scipy import stats
import seaborn as sns
import numpy.random as npr
import matplotlib

matplotlib.use(backend="TkAgg")
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

'''
两幅子图对比了 “任意的非递减有界函数”（用 analytical_func 构造）
和 “概率论里合格的分布函数（CDF）”（标准正态的 stats.norm.cdf）：展示二者在 
𝑥→±∞极限上的不同，进而说明概率分布函数必须满足 
𝐹(−∞)=0,𝐹(+∞)=1
F(−∞)=0,F(+∞)=1 的归一化条件。
'''

# 演示不同函数的分布函数性质
x = np.linspace(-3, 3, 1000)

# 1. 分析学中的一般非递减有界函数（不满足概率要求）
def analytical_func(x):
    return (np.arctan(x) + np.pi/2) / (2 * np.pi)  # 范围在 [0, 0.5]

# 2. 概率论中的标准分布函数（满足所有要求）
def probability_func(x):
    return stats.norm.cdf(x)  # 标准正态分布的CDF

plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.plot(x, analytical_func(x), 'b-', linewidth=2, label='分析学分布函数')
plt.axhline(y=analytical_func(-np.inf), color='r', linestyle='--', alpha=0.7,
            label=f'F(-∞) = {analytical_func(-np.inf):.2f}')
plt.axhline(y=analytical_func(np.inf), color='g', linestyle='--', alpha=0.7,
            label=f'F(+∞) = {analytical_func(np.inf):.2f}')
plt.xlabel('x')
plt.ylabel('F(x)')
plt.title('分析学中的分布函数\n(非递减有界但不满足概率要求)')
plt.legend()
plt.grid(True, alpha=0.3)

plt.subplot(1, 2, 2)
plt.plot(x, probability_func(x), 'b-', linewidth=2, label='概率论分布函数')
plt.axhline(y=0, color='r', linestyle='--', alpha=0.7, label='F(-∞) = 0')
plt.axhline(y=1, color='g', linestyle='--', alpha=0.7, label='F(+∞) = 1')
plt.xlabel('x')
plt.ylabel('F(x)')
plt.title('概率论中的分布函数\n(满足 F(-∞)=0, F(+∞)=1)')
plt.legend()
plt.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

print(f"分析学函数: F(-∞)={analytical_func(-np.inf):.3f}, "
      f"F(+∞)={analytical_func(np.inf):.3f}, "
      f"差值={analytical_func(np.inf)-analytical_func(-np.inf):.3f}")
print(f"概率论函数: F(-∞)={probability_func(-np.inf):.3f}, "
      f"F(+∞)={probability_func(np.inf):.3f}, "
      f"差值={probability_func(np.inf)-probability_func(-np.inf):.3f}")